<html>
  <head>
	  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>i5ting_ztree_toc:node</title>
		<link href="toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/css/zTreeStyle/zTreeStyle.css" media="all" rel="stylesheet" type="text/css"/>
	  <style>
		pre {
		    counter-reset: line-numbering;
		    border: solid 1px #d9d9d9;
		    border-radius: 0;
		    background: #fff;
		    padding: 0;
		    line-height: 23px;
		    margin-bottom: 30px;
		    white-space: pre;
		    overflow-x: auto;
		    word-break: inherit;
		    word-wrap: inherit;
		}

		pre a::before {
		  content: counter(line-numbering);
		  counter-increment: line-numbering;
		  padding-right: 1em; /* space after numbers */
		  width: 25px;
		  text-align: right;
		  opacity: 0.7;
		  display: inline-block;
		  color: #aaa;
		  background: #eee;
		  margin-right: 16px;
		  padding: 2px 10px;
		  font-size: 13px;
		  -webkit-touch-callout: none;
		  -webkit-user-select: none;
		  -khtml-user-select: none;
		  -moz-user-select: none;
		  -ms-user-select: none;
		  user-select: none;
		}

		pre a:first-of-type::before {
		  padding-top: 10px;
		}

		pre a:last-of-type::before {
		  padding-bottom: 10px;
		}

		pre a:only-of-type::before {
		  padding: 10px;
		}

		.highlight { background-color: #ffffcc } /* RIGHT */
		</style>
  </head>
  <body>
	  <div>
				<div style='width:25%;'>
						<ul id="tree" class="ztree" style='width:100%'>

						</ul>
				</div>
        <div id='readme' style='width:70%;margin-left:20%;'>
          	<article class='markdown-body'>
            	<h1 id="node-">node学习笔记</h1>
<h2 id="fs-">fs模块</h2>
<ol>
<li>fs.readFile(读取路径, 读取格式, 回调函数) 读取文件内容<ol>
<li>fs.writeFile()方法只能用来创建文件，不能用来创建路径</li>
<li>重复调用fs.writeFile()写入同一个文件，新写入的内容会覆盖之前的旧内容</li>
</ol>
</li>
<li>fs.writeFile(写入路径, 写入内容, 写入格式(可选), 回调函数) 写入文件内容</li>
</ol>
<p>__dirname 表示当前文件所处的目录</p>
<h2 id="path-">path模块</h2>
<ol>
<li><p>path 用来处理路径的模块，凡是涉及到路径拼接的操作，都要使用path.join()方法进行处理，不要直接使用+进行字符串的拼接</p>
<pre><code class="lang-js">fs.readFile(path.join(__dirname,&#39;/file/demo.txt&#39;), &#39;utf-8&#39;, (err, res) =&gt; {
  console.log(res);
})
</code></pre>
</li>
</ol>
<ol>
<li>path.join()方法，用来将多个路径片段拼接成一个完整的路径字符串</li>
<li>path.basename()方法，用来从路径字符串中，将文件名解析出来</li>
<li>path.extname()方法，可以获取路径中的扩展名部分</li>
</ol>
<h2 id="http-">http模块</h2>
<h3 id="-">什么是客户端？什么是服务器？</h3>
<p>在网络节点中，负责消费资源的电脑，叫客户端；负责对外提供网络资源的电脑，叫做服务器</p>
<p>http模块是Node.js官方提供的、用来创建web服务器的模块。通过http模块提供的http.createServer()方法，就能方便的把一台普通的电脑，变成一台web服务器，从而对外提供web资源服务。</p>
<p>服务器和普通电脑的区别在于：服务器上安装了web服务器软件：IIS、Apache等。</p>
<h3 id="-">服务器相关的概念</h3>
<h4 id="ip-">IP地址</h4>
<p>IP地址就是互联网上每台计算机的唯一地址。只有在知道对方IP地址的前提下，才能与对应的电脑之间进行数据通信。</p>
<p>IP地址的格式：通常用“点分十进制”表示成（a.b.c.d）的形式，其中，a.b.c.d都是0~255之间的十进制整数。例如：用点分十进制表示的IP地址(192.168.1.1)</p>
<ol>
<li>互联网中每台Web服务器，都有自己的IP地址，例如：可以在Windows的终端中运行<code>ping www.baidu.com</code>命令查看百度服务器的IP地址</li>
<li>在开发期间，自己的电脑就是一台服务器，也是一个客户端，为了方便测试，可以在浏览器中输入127.0.0.1来访问。</li>
</ol>
<h3 id="-">域名和域名服务器</h3>
<p>IP地址虽然能够唯一的标记网络上的计算机，但是IP地址作为一串数字，不方便记忆，所以有了域名地址。</p>
<p>IP地址和域名是一一对应的关系，这种对应关系放在域名服务器(DNS, Domain name server)的电脑中。使用者只需通过好记的域名访问对应的服务器即可，对应的转换工作由域名服务器实现。因此，域名服务器就是提供IP地址和域名之间的转换服务的服务器。</p>
<p>注意点：</p>
<ol>
<li>单纯使用IP地址，也可以正常访问，只是域名会更加的方便。</li>
<li>在开发测试阶段，127.0.0.1对应的就是localhost，都代表自己的这台电脑。</li>
</ol>
<h3 id="-">端口号</h3>
<p>计算机中的端口号，就像我们的门牌号一样。在一台电脑中，可以运行成百上千个web服务，每个web服务都对应一个唯一的端口号，客户端发送过来的网络请求，通过端口号，可以被准确的交给对应的web服务进行处理。</p>
<p>注意点：</p>
<ol>
<li>每个端口号不能同时被多个web服务占用</li>
<li>在实际应用中，URL中的80端口可以被省略</li>
</ol>
<h3 id="-web-">创建web服务器的基本步骤</h3>
<ol>
<li>导入http模块</li>
<li>创建web服务器实例</li>
<li>为服务器实例通过on()方法绑定request事件，监听客户端的请求</li>
<li>启动服务器<ol>
<li>调用服务器实例的.listen()方法，启动服务器</li>
</ol>
</li>
</ol>
<h4 id="req-">req请求对象</h4>
<p>只要服务器接收到了客户端的请求，就会调用server.on()为服务器绑定的request事件处理函数</p>
<p>如果想在事件处理函数中，访问与客户端相关的数据或属性，可以使用如下的方式：</p>
<pre><code class="lang-js">server.on(&#39;request&#39;, (req) =&gt; {

})
</code></pre>
<h3 id="-url-html-">根据不同的url响应不同的html内容</h3>
<p>核心实现步骤：</p>
<ol>
<li>获取请求的url地址</li>
<li>设置默认的响应内容为 404 Not Found</li>
<li>判断用户请求<ol>
<li>判断用户请求的是否为/ 或 /index.html 首页</li>
<li>判断用户请求的是否为 /about.html 关于页面</li>
<li>判断用户请求的是否为 /home.html 主页</li>
</ol>
</li>
<li>设置Content-Type响应头，防止中文乱码</li>
<li>使用res.end()把内容响应给客户端</li>
</ol>
<h2 id="npm-">NPM与包</h2>
<ul>
<li>开发依赖包 (devDependencies) 只在开发环境期间用到</li>
<li>核心依赖包 (dependencies) 在开发和线上环境都会用到</li>
</ul>
<h3 id="-">自定义模块的加载机制</h3>
<p>使用require()加载自定义模块时，必须指定以./或../开头的路径标识符。在加载自定义模块时，如果没有指定./或../这样的路径标识符，则node会把它当成内置模块(例如fs，path等)或第三方模块(需要npm i xxx引入的)进行加载。</p>
<p>同时，在使用require()导入自定义模块时，如果省略了文件的扩展名，则Node.js会按照顺序分别尝试加载以下文件：</p>
<ol>
<li>按照确切的文件名进行加载</li>
<li>补全.js扩展名进行加载</li>
<li>补全.json扩展名进行加载</li>
<li>补全.node扩展名进行加载</li>
<li>加载失败，终端报错</li>
</ol>
<h2 id="-express">初识Express</h2>
<h3 id="express-">Express简介</h3>
<h4 id="-express">什么是Express</h4>
<ul>
<li>官方概念：Express是基于Node.js平台，快速、开放、极简的Web开发框架</li>
<li>通俗理解：Express的作用和Node.js内置的http模块类似，是专门用来创建Web服务器的</li>
</ul>
<p><strong>Express的本质</strong></p>
<p>就是一个npm的第三方包，提供了快速创建Web服务器的便捷方法。</p>
<h4 id="-express">进一步理解Express</h4>
<p>Express和http都是用来创建Web服务器的模块，不同的是，http内置模块用起来比较复杂，开发效率低；Express是基于内置的http模块进一步封装出来的，能够极大的提升开发效率。</p>
<h4 id="express-">Express能做什么</h4>
<p>对于前端程序员来说，最常见的两种服务器，分别是：</p>
<ul>
<li>Web网站服务器：专门对外提供Web网页资源的服务器</li>
<li>API接口服务器：专门对外提供API接口的服务器</li>
</ul>
<p>使用Express，我们可以方便、快速的创建Web网站的服务器或API接口服务器。</p>
<h3 id="express-">Express的基本使用</h3>
<h4 id="-web-">创建基本的Web服务器</h4>
<pre><code>// 1.导入express
const express = require(&#39;express&#39;)
// 2.创建web服务器
const app = express()

// 3.调用app.listen(端口号，启动成功的回调函数),启动服务器
app.listen(80, () =&gt; {
    console.log(&#39;express server running at http://127.0.0.1&#39;)
})
</code></pre>
          	</article>
        </div>
		</div>
  </body>
</html>
<script type="text/javascript" src="toc/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="toc/js/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript" src="toc/js/ztree_toc.js"></script>
<script type="text/javascript" src="toc_conf.js"></script>

<SCRIPT type="text/javascript" >
<!--
$(document).ready(function(){
    var css_conf = eval(markdown_panel_style);
    $('#readme').css(css_conf)
    
    var conf = eval(jquery_ztree_toc_opts);
		$('#tree').ztree_toc(conf);
});
//-->
</SCRIPT>